import request from "../utils/request";

/**
 * =================================================================
 * 考次管理 (`/exam-sessions`)
 * =================================================================
 */
class ExamSessionRequest {

    /**
     * 新增考次
     * @param {string} sessionCode - 考次代码 (如: "202404")
     * @param {string} sessionName - 考次名称 (如: "2024年4月自学考试")
     * @param {number} examYear - 考试年份
     * @param {string} startDate - 开始日期 (格式: "YYYY-MM-DD")
     * @param {string} endDate - 结束日期 (格式: "YYYY-MM-DD")
     * @param {number} [status=1] - 状态 (1:开放, 0:结束)
     * @returns {Promise<object>} - 创建成功的考次对象
     */
    async add(sessionCode, sessionName, examYear, startDate, endDate, status = 1) {
        const newSession = await request({
            url: '/exam-sessions',
            method: 'post',
            data: {
                sessionCode,
                sessionName,
                examYear,
                startDate,
                endDate,
                status
            },
        });
        return newSession;
    }

    /**
     * 查询考次列表
     * @param {object} [options={}] - 筛选和分页参数
     * @param {number} [options.page=1] - 页码
     * @param {number} [options.size=10] - 每页数量
     * @param {number} [options.year] - 按年份筛选
     * @returns {Promise<object>} - 标准分页列表数据
     */
    async getList({ page, size, year } = {}) {
        return request({
            url: '/exam-sessions',
            method: 'get',
            params: { page, size, year },
        });
    }

    /**
     * 获取单个考次详情
     * @param {number|string} id - 考次ID
     * @returns {Promise<object>} - 单个考次详情
     */
    async getById(id) {
        return request({
            url: `/exam-sessions/${id}`,
            method: 'get',
        });
    }

    /**
     * 更新考次
     * @param {number|string} id - 考次ID
     * @param {object} sessionData - 包含待更新字段的对象
     * @returns {Promise<object>} - 更新后的考次对象
     */
    async update(id, sessionData) {
        return request({
            url: `/exam-sessions/${id}`,
            method: 'put',
            data: sessionData,
        });
    }

    /**
     * 删除考次
     * @param {number|string} id - 考次ID
     * @returns {Promise<null>}
     */
    async delete(id) {
        return request({
            url: `/exam-sessions/${id}`,
            method: 'delete',
        });
    }
}


/**
 * =================================================================
 * 考点管理 (`/exam-venues`)
 * =================================================================
 */
class ExamVenueRequest {

    /**
     * 新增考点
     * @param {string} venueCode - 考点代码
     * @param {string} venueName - 考点名称
     * @param {string} address - 详细地址
     * @param {string} city - 所在城市
     * @param {number} capacity - 考场容量
     * @param {string} contactPerson - 联系人
     * @param {string} contactPhone - 联系电话
     * @param {number} [status=1] - 状态 (1:启用, 0:禁用)
     * @returns {Promise<object>} - 创建成功的考点对象
     */
    async add(venueCode, venueName, address, city, capacity, contactPerson, contactPhone, status = 1) {
        const newVenue = await request({
            url: '/exam-venues',
            method: 'post',
            data: {
                venueCode,
                venueName,
                address,
                city,
                capacity,
                contactPerson,
                contactPhone,
                status
            },
        });
        return newVenue;
    }

    /**
     * 查询考点列表
     * @param {object} [options={}] - 筛选和分页参数
     * @param {number} [options.page=1] - 页码
     * @param {number} [options.size=10] - 每页数量
     * @param {string} [options.city] - 按城市筛选
     * @param {string} [options.venueName] - 按考点名称模糊查询
     * @returns {Promise<object>} - 标准分页列表数据
     */
    async getList({ page, size, city, venueName } = {}) {
        return request({
            url: '/exam-venues',
            method: 'get',
            params: { page, size, city, venueName },
        });
    }

    /**
     * 获取单个考点详情
     * @param {number|string} id - 考点ID
     * @returns {Promise<object>} - 单个考点详情
     */
    async getById(id) {
        return request({
            url: `/exam-venues/${id}`,
            method: 'get',
        });
    }

    /**
     * 更新考点
     * @param {number|string} id - 考点ID
     * @param {object} venueData - 包含待更新字段的对象
     * @returns {Promise<object>} - 更新后的考点对象
     */
    async update(id, venueData) {
        return request({
            url: `/exam-venues/${id}`,
            method: 'put',
            data: venueData,
        });
    }

    /**
     * 删除考点
     * @param {number|string} id - 考点ID
     * @returns {Promise<null>}
     */
    async delete(id) {
        return request({
            url: `/exam-venues/${id}`,
            method: 'delete',
        });
    }
}


// 分别导出两个类的实例，方便调用
export const examSessionApi = new ExamSessionRequest();
export const examVenueApi = new ExamVenueRequest();